package main

import (
	"fmt"
	"log"
	"time"
	"ebbflow/logger"
)

func main() {
	// 测试简化的日志模块
	simplifiedLogger, err := logger.NewSimplifiedEbbFlowLogger(0, "logger")
	if err != nil {
		log.Fatalf("Failed to create simplified logger: %v", err)
	}

	fmt.Println("=== EbbFlow简化性能监控测试 ===")
	fmt.Println("每5秒记录一次性能指标和组件整体延迟...")

	// 获取组件跟踪器
	tracker := simplifiedLogger.GetComponentTracker()

	// 模拟性能数据
	for i := 0; i < 6; i++ {
		epoch := i + 1
		tps := 1000.0 + float64(i*100)
		latency := int64(20 + i*5)
		batchSize := 1000
		txSize := 250

		// 记录整体性能
		simplifiedLogger.LogPerformance(tps, latency, epoch, batchSize, txSize)

		// 模拟RBC整体操作
		rbcTracker := tracker.TrackRBC(epoch*100, i, epoch)
		time.Sleep(50 * time.Millisecond) // 模拟整个RBC协议执行时间
		rbcTracker.Finish(true, "")

		// 模拟ABA整体操作
		abaTracker := tracker.TrackABA(epoch*100, i, epoch)
		time.Sleep(80 * time.Millisecond) // 模拟整个ABA协议执行时间
		abaTracker.Finish(true, "")

		// 模拟CommonCoin整体操作
		coinTracker := tracker.TrackCommonCoin(epoch*100, i, epoch)
		time.Sleep(30 * time.Millisecond) // 模拟整个CommonCoin协议执行时间
		coinTracker.Finish(true, "")

		// 模拟CBR整体操作
		cbrTracker := tracker.TrackCBR(epoch*100, i, epoch)
		time.Sleep(60 * time.Millisecond) // 模拟整个CBR协议执行时间
		cbrTracker.Finish(true, "")

		// 模拟ProofChain整体操作
		proofTracker := tracker.TrackProofChain(epoch*100, i, epoch)
		time.Sleep(40 * time.Millisecond) // 模拟整个ProofChain协议执行时间
		proofTracker.Finish(true, "")

		// 模拟一些失败的操作
		if i%3 == 0 {
			failedTracker := tracker.TrackRBC(epoch*100, i, epoch)
			time.Sleep(100 * time.Millisecond)
			failedTracker.Finish(false, "Network timeout")
		}

		time.Sleep(6 * time.Second)
	}

	// 停止并导出
	simplifiedLogger.Stop()

	// 生成性能报告
	report := simplifiedLogger.GeneratePerformanceReport()
	fmt.Println("\n=== 简化性能分析报告 ===")
	fmt.Println(report)

	fmt.Println("测试完成！简化日志文件保存在 logger/ 目录")
}
